#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <cstdlib>
#include <ctime>
#include <string>

/*两个玩家轮流行动且游戏方式一致
两个玩家对状况完全了解
游戏一定在有限步分出胜负
游戏以玩家无法行动结束
博弈的双方为神之个体，对状况完全了解，且充分为自己打算，绝对理性*/

using namespace std;


// 巴什博弈(Bash Game)
#if 0

// 一共有n颗石子，两个人轮流拿，每次可以拿1~m颗石子
// 拿到最后一颗石子的人获胜，根据n、m返回谁赢

// 如果n被(m+1)整除,那么是后手获胜，否则是先手
// 1.假设能被m+1整除,先手无论怎么取，后手取的数量与先手的和为m+1
// 那么最后一轮一定剩下m+1个，先手取不完，后手一定赢
// 2.不能被m+1整除，先手先将石子数取成能被m+1整除的，然后面对情况
// 和1就反过来了

// 动态规划进行所有尝试
const int MAXN = 1001;
string dp[MAXN][MAXN];

string bashGame1(int n, int m) {
    if (n == 0) {
        // 没有石子，先手不能取，后手获胜
        return "后手";
    }
    if (dp[n][m] != "") {
        // 记忆化搜索
        return dp[n][m];
    }
    string ans = "后手";
    for (int pick = 1; pick <= m; pick++) {
        // 每个可能的取法
        if (bashGame1(n - pick, m) == "后手") {
            // 返回后手，后手失败
            ans = "先手";
            break;
        }
    }
    dp[n][m] = ans;
    return ans;
}


string bashGame2(int n, int m) {
	return n % (m + 1) != 0 ? "先手" : "后手";
}

int main() {
    int V = 500;
    int testTimes = 5000;
    cout << "测试开始" << endl;
    srand(time(NULL)); // 初始化随机数种子
    for (int i = 0; i < testTimes; i++) {
        int n = rand() % V;
        int m = rand() % V + 1;
        string ans1 = bashGame1(n, m);
        string ans2 = bashGame2(n, m);
        if (ans1 != ans2) {
            cout << "出错了!" << endl;
        }
    }
    cout << "测试结束" << endl;
    return 0;
}

#endif

// 质数次方版取石子(巴什博弈扩展)
#if 0
// https://www.luogu.com.cn/problem/P4018
// 任意的6的整数倍一定不是质数的自然数次方
// 6 = 2 * 3;2的某次方，不能得到6的整数倍
int t, n;
string compute(int n) {
    return n % 6 != 0 ? "October wins!" : "Roy wins!";
}
int main() {
    scanf("%d", &t);
    for (int i = 0; i < t; i++) {
        scanf("%d", &n);
        cout << compute(n) << endl;
    }
    return 0;
}
#endif

// 尼姆博弈(Nim Game)
#if 0
// https://www.luogu.com.cn/problem/P2197
// 两堆石头，数量相同，后手按照先手拿另一堆，先手失败
// (所有的数字异或结果!=0)-->A状态,(==0为B状态)先手一定赢
// 先手见到A状态，一定有办法变成B状态，遇到B状态，无论怎么操作都是变成A状态

// 1.

int main() {
    int t, n, eor, val;
    string line;

    cin >> t;

    for (int i = 0; i < t; i++) {
        cin >> n;
        eor = 0;
        for (int j = 0; j < n; j++) {
            cin >> val;
            eor ^= val;
        }
        if (eor != 0) {
            cout << "Yes" << endl;
        }
        else {
            cout << "No" << endl;
        }
    }

    return 0;
}
#endif

// 反尼姆博弈(反常游戏)
// https://www.luogu.com.cn/problem/P4279
#if 0
// 拿最后一块失败
// 1.全是1：偶数个是先手赢
// 2.只有一个大于1：先手赢，因为能决定大于1的那一堆被自己拿后变成1还是0
// 由上题：变成异或结果不是0的状态
// 3.随机数量和堆，如果异或结果不是0，那么根据上一题，先手先撞上情况2

const int MAXN = 51;
int stones[MAXN];
int t, n;

string compute() {
    int eor = 0, sum = 0;
    for (int i = 0; i < n; i++) {
        eor ^= stones[i];
        sum += stones[i] == 1 ? 1 : 0;
    }
    if (sum == n) {
        return (n & 1) == 1 ? "Brother" : "John";
    }
    else {
        return eor != 0 ? "John" : "Brother";
    }
}

int main() {
    cin >> t;
    for (int i = 0; i < t; i++) {
        cin >> n;
        for (int j = 0; j < n; j++) {
            cin >> stones[j];
        }
        cout << compute() << endl;
    }
    return 0;
}

#endif

// 斐波那契博弈(Fibonacci Game + Zeckendorf定理)
// https://www.luogu.com.cn/problem/P6487
// 如果石子数量是斐波那契数，先手第一次必须全部取完，否则一定失败




